import java.util.HashMap;

/**
 * @Description:验证外星语词典 某种外星语也使用英文小写字母，但可能顺序 order 不同。字母表的顺序（order）是一些小写字母的排列。
 * 给定一组用外星语书写的单词 words，以及其字母表的顺序 order，
 * 只有当给定的单词在这种外星语中按字典序排列时，返回 true；否则，返回 false。
 * @Date:Create in 19:27  2022/5/17
 */
public class isAlienSorted0953 {
    public static void main(String[] args) {
        String[] words = new String[]{"hello", "leetcode"};
        String order = "hlabcdefgijkmnopqrstuvwxyz";
        System.out.println(isAlienSorted1(words, order));

    }


    public static boolean isAlienSorted1(String[] words, String order) {
        HashMap<Character, Integer> orderMap = new HashMap<>();
        for (int i = 0; i < order.length(); i++) {
            orderMap.put(order.charAt(i), i);
        }
        for (int j = 0; j < words.length - 1; j++) {
//            int a = words[j].length();
//            int b = words[j+1].length();
            int size = Math.min(words[j].length(), words[j + 1].length());
            System.out.println(size);
            boolean flag = isSorted1(words[j], words[j + 1], orderMap);
            if (words[j].length() > words[j + 1].length() && flag) {
                return true;
            } else if (words[j].length() < words[j + 1].length() && flag) {
                return true;
            }

        }
        return false;

    }

    //如果真的要用这个可以考虑返回一个boolean数组,第一个位置放是否符合map条件,第二个放是否小的字符串和长的字符串的前面是相同的字符串,
    // ab  abc的,就可以返回 true,true  如果它是这样的,abc  ab 就可以返回true,false,然后第一个是true的时候看第二个,意思就是前面一部分相同的时候看后面的字符串是不是长一些
    public static boolean isSorted1(String word1, String word2, HashMap map) {
        int size = Math.min(word1.length(), word2.length());
        for (int k = 0; k < size; k++) {
            if(word1.charAt(k)!=word2.charAt(k)){
                int order1 = (int) map.get(word1.charAt(k));
                int order2 = (int) map.get(word2.charAt(k));
//                System.out.println(order1);
//                System.out.println(order2);
//                System.out.println("/n");
                if (order1 < order2) {
                    return true;
                } else if (order1 > order2) {
                    return false;
                }
            }

        }
        return true;
    }
}
